<?php
	class Balise{
	/*
		Classe Balise - Version 0.1
		Auteur : Loïc "MetalFox" PARRA
		Classe mère de toutes les classes de génération de balises.
		
		README :
		La classe est utilisable telle qu'elle, mais il est préférable d'utiliser une de ses classes filles pour s'assurer de la cohésion des attributs et de l'automatisation de certaines taches.
		Les attributs sont un tableau de la forme "Nom de l'attribut" => "Valeur de l'attribut". Autrement dit, les valeurs d'attributs sont indicés par leur nom (exemple : $attributes['href'] = "http://www.example.com".
		Si la balise n'a pas de texte, elle sera automatiquement auto-fermante.
		
		SUCRE SYNTAXIQUE :
		- Pour utiliser la balise, un echo suffit :
			$balise = new Balise("maBalise","monTexte");
			echo $galerie; => Donnera <maBalise>monTexte</maBalise>
	*/
	
		var $name;
		var $text;
		var $attributes;
		
		function Balise($nom,$texte){
			/* 
				Constructeur de la balise.
				@param $nom : nom de la balise.
				@param $texte : texte de la balise.
				@return N/A.
			*/
			
			$this->name = $nom;
			$this->text = $texte;
			$this->attributes = array();
		}
		
		function setAttribute($nomAttribut,$valeurAttribut){
			/* 
				Ajoute un attribut a la balise. S'il existe déja, il le modifie.
				@param $nomAttribut : nom de l'attribut.
				@param $valeurAttribut : valeur de l'attribut.
				@return N/A.
			*/
			
			$this->attributes[$nomAttribut] = $valeurAttribut;
		}
		
		function makeAttributes(){
			/* 
				Met en forme la liste des attributs actuels de la balise, tels qu'ils doivent être disposés lors de l'affichage de la balise.
				@return : la liste des attributs mis en forme.
			*/
			
			$attributes = '';
			$i=0;
			foreach($this->attributes as $name => $value)
			{
				$attributes .= $name.'="'.$value.'" ';
			}
			return $attributes;
		}
		
		function make(){
			/* 
				Créé la balise.
				@return : un String de la balise mise en forme.
			*/
			$balise = '<'.$this->name.' '.$this->makeAttributes();
			if($this->text != ''){
				$balise .= '>'.$this->text.'</'.$this->name.'>';	
			}
			else
			{
				$balise .= '/>';
			}
			return $balise;
		}
		
		function __toString(){
			/* 
				MAGIC METHOD pour gérer la concatenation, les echos etc...
				@return : la balise mise en forme.
			*/
			return $this->make();
		}
		
		public function __set($nomAttribut, $valeurAttribut)
		{
			$this->attributes[$nomAttribut] = $valeurAttribut;
		}

		public function __get($name)
		{
			try{
				if (!array_key_exists($name, $this->attributes)) {
					throw new Exception("Balise : '".$name."' n'est pas un attribut.");
				}
				return $this->attributes[$name];
			}
			catch (Exception $e)
			{
				echo "PHPFoxEngine Error : ".$e->getMessage();
			}
		}
	}
?>